package ms.maplestory.boot.packets.universal;

import ms.maplestory.boot.client.character.Inventory.Equip;
import ms.maplestory.boot.client.character.Inventory.Item;
import ms.maplestory.boot.connection.OutPacket;
import ms.maplestory.boot.constants.GameConstants;
import ms.maplestory.boot.enums.ItemType;
import ms.maplestory.boot.util.FileTime;

public class ItemSlotBase {

    public static void encode(OutPacket out, Item item) {
        out.encodeByte(item.getType().getValue());
        out.encodeInt(item.getItemId());
        out.encodeByte(item.isCash());
        if (item.isCash()) {
            out.encodeLong(item.getId());
        }
        out.encodeFT(item.getDateExpire());
        if (item.getType() == ItemType.Equip) {
            final Equip equip = (Equip) item;
            out.encodeByte(equip.getTuc());
            out.encodeByte(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeString(equip.getOwner());
            out.encodeShort(0);
            out.encodeByte(0);
            out.encodeByte(0);
            out.encodeInt(0);
            out.encodeInt(0);
            out.encodeInt(0);
            out.encodeByte(0);
            out.encodeByte(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            out.encodeShort(0);
            if (!item.isCash()) {
                out.encodeLong(equip.getInventoryId() <= 0 ? -1 : equip.getInventoryId());
            }
            out.encodeFT(FileTime.fromType(FileTime.Type.MAX_TIME));
            out.encodeInt(0);
        } else {
            out.encodeShort(item.getQuantity());
            out.encodeString(item.getOwner());
            out.encodeShort(0);
            if (GameConstants.isThrowingStar(item.getItemId()) || GameConstants.isBullet(item.getItemId()) || item.getItemId() / 10000 == 287) {
                out.encodeLong(item.getInventoryId() <= 0 ? -1 : item.getInventoryId());
            }
        }
    }

}
